#include <string.h>
#include <cmath>   
#include <iostream>  //预处理器指令 a PREPROCESSOR directive
#include <vector>
#include <array>

using namespace std; //使定义可见   make definitions visible

/*
  C++ Primer  程序清单7.7  数组函数和const

  cin填充数组,打印数组,修改数组

*/

int fill_array(double ar[],int limit);
void show_array(const double ar[],int n);
void revalue(double r,double ar[],int n);


int main(){

  //数组来记录房地产的价值
  double ar[10];
  
  int ipt = fill_array(ar,6);

  show_array(ar,ipt);

  revalue(1.5,ar,ipt);

  show_array(ar,ipt);

}

//打印数组
void show_array(const double ar[],int n)
{ 
  //确保显示函数不修改原始数组。 声明形参时使用关键字const 
  //C++将声明const double ar[]解释为const double* ar。

  cout << endl << "展示数组数据: " << endl;
  for(int i = 0;i < n;i++)
  {
    cout << "Property #" << (i+1) << ":$";
    cout << ar[i] << endl;
  }
}

//将值读入到数组中
int fill_array(double ar[],int limit){
  double temp;
  int i;
  for(i = 0; i < limit; i++)
  {
    cout << "Enter value #" << (i +1) << ":";
    cin >> temp;

    if (!cin){
      cin.clear();
      while(cin.get() != '\n')
        continue;
      cout << "Bad input; input process terminated.In";
      break;

    //用户也可能希望在数组被填满之前停止读取数据 使用负数来指出输入结束 
    } else if (temp < 0) // signal to terminate 终止信号 
      break; 
    
    ar[i] = temp;
  }

  //由于用户输入的元素数目可能少于数组的长度
  return i; //返回实际输入长度
}

//重新评估每种房地产的值 r 评估因子
void revalue(double r,double ar[],int n)
{ 
  //将每个元素与同一个重新评估因子相乘。
  for(int i = 0; i < n; i++)
    ar[i]*=r;
}

